/*
Copyright (c) 2025 HeZongLun
NahidaProject is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan
PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/

#pragma once

#ifdef _WIN32
#define ExportSymbol  __declspec(dllexport)
#else
#define ExportSymbol
#endif

#include <cstddef>
#include <cstdlib>
#include <iostream>
namespace NahidaProject {

	class ExportSymbol MemoryPool {
	private:
		struct ExportSymbol FreeBlock {
			FreeBlock* next;
		};

		void* pool;
		FreeBlock* freeList;
		size_t blockSize;
		size_t poolSize;

	public:
		MemoryPool(size_t blockSize, size_t blockCount);
		~MemoryPool();

		void* Allocate();
		void Deallocate(void* ptr);
		int PrintFreeBlocks() const;
	};
}
